As the value and use of information continue to increase, individuals and businesses seek additional ways to process and store information. One option available to users is information handling systems. An information handling system generally processes, compiles, stores, and/or communicates information or data for business, personal, or other purposes, thereby allowing users to take advantage of the value of the information. Because technology and information handling needs and requirements vary between different users or applications, information handling system's may also vary regarding what information is handled, how the information is handled, how much information is processed, stored, or communicated, and how quickly and efficiently the information may be processed, stored, or communicated. The variations in IHSs allow for IHSs to be general or configured for a specific user or specific use such as financial transaction processing, airline reservations, enterprise data storage, or global communications. In addition, an information handling system may include a variety of hardware and software components that may be configured to process, store, and communicate information and may include one or more computer systems, data storage systems, and networking systems.
Windows family operating systems from Microsoft provide two types of storage port drivers—the Small Computer System Interface (SCSI) Port driver and the Storport driver. The SCSI port driver supports a “half-duplex” mode that may be used to implement the driver within a single-core architecture. As is well known, Windows port drivers interact with vendor-provided code, commonly referred to as a miniport or a miniport driver, which can invoke Microsoft-provided services. Miniport drivers for the SCSI port driver use an interrupt lock to synchronize execution of certain Microsoft-provided services including StartIO and Interrupt Service Routine (ISR) services. In contrast, a SCSI port miniport driver can invoke a BuildIO service asynchronously, i.e., without acquiring any lock. The minimum number of clock cycles required to execute two pieces of code asynchronously is lower than the minimum number of clock cycles required to execute synchronously because the asynchronous code can execute in parallel for some or all of the applicable clock cycles, however certain services must execute synchronously to maintain coherency.